package mx.ipn.negocios.empleado;

import mx.ipn.negocios.CodigosDeError;
import mx.ipn.negocios.ConexionConPersistencia;
import mx.ipn.to.TransferObject;
import mx.ipn.to.FechaHoraTO;
import mx.ipn.to.EmpleadoTO;
import mx.ipn.to.MotivoTO;
import mx.ipn.to.BitacoraHorarioTO;
import mx.ipn.to.FiltroEmpleadoTO;
import java.util.Date;
import java.util.ArrayList;
import mx.ipn.to.BitacoraAsistenciaTO;

public class HorarioBO {

	public static TransferObject validarRangoFecha(mx.ipn.to.HorarioTO horarioTO) {
		Date fecha1 = horarioTO.getFechaInicio();
		Date fecha2 = horarioTO.getFechaTermino();
		TransferObject regreso = new TransferObject();
		Date hoy = (java.util.Date) ConexionConPersistencia.invocaServicio(
				"obtenerFechaActual", java.util.Date.class);
		if (hoy != null) {
			hoy = FechaHoraTO
					.getFechaUtil(FechaHoraTO.getFecha(hoy).toString());
			fecha1 = FechaHoraTO.getFechaUtil(FechaHoraTO.getFecha(fecha1)
					.toString());
			fecha2 = FechaHoraTO.getFechaUtil(FechaHoraTO.getFecha(fecha2)
					.toString());

			if (hoy.getTime() <= fecha1.getTime()
					&& fecha1.getTime() <= fecha2.getTime()) {
				regreso.setTipoError(0);
			} else {
				regreso.setTipoError(TransferObject.ERROR);
				regreso.setError(CodigosDeError.error.get(35001));
			}
		} else {
			regreso.setTipoError(TransferObject.ERROR);
			regreso.setError(CodigosDeError.error.get(34001));
		}

		return regreso;

	}

	public static EmpleadoTO[] filtrarEmpleadosConsiderados(
			FiltroEmpleadoTO filtroTO) {
		ArrayList<EmpleadoTO> listEmpleadoTO = new ArrayList<EmpleadoTO>();
		if (filtroTO.getArrEmpleado1TO() != null) {
			if (filtroTO.getArrEmpAOperarTO() != null) {
				for (int x = 0; x < filtroTO.getArrEmpleado1TO().length; x++) {
					for (int y = 0; y < filtroTO.getArrEmpAOperarTO().length; y++) {
						if (filtroTO.getArrEmpleado1TO()[x].getIdEmpleado() != filtroTO
								.getArrEmpAOperarTO()[y].getIdEmpleado()) {
							listEmpleadoTO.add(filtroTO.getArrEmpleado1TO()[x]);
						}
					}
				}

				return (EmpleadoTO[]) listEmpleadoTO
						.toArray(new EmpleadoTO[listEmpleadoTO.size()]);
			} else {
				return filtroTO.getArrEmpleado1TO();
			}
		} else {
			return null;
		}
	}

	public static EmpleadoTO[] agregarEmpleados(FiltroEmpleadoTO filtroTO) {
		ArrayList<EmpleadoTO> listEmpleadoTO = new ArrayList<EmpleadoTO>();
		if (filtroTO.getArrEmpleado1TO() != null) {
			for (int x = 0; x < filtroTO.getArrEmpleado1TO().length; x++) {
				listEmpleadoTO.add(filtroTO.getArrEmpleado1TO()[x]);
			}
		}
		listEmpleadoTO.add(filtroTO.getEmpleadoTO());

		return (EmpleadoTO[]) listEmpleadoTO
				.toArray(new EmpleadoTO[listEmpleadoTO.size()]);
	}

	public static EmpleadoTO[] quitarEmpleados(FiltroEmpleadoTO filtroTO) {
		ArrayList<EmpleadoTO> listEmpleadoTO = new ArrayList<EmpleadoTO>();

		if (filtroTO.getArrEmpleado1TO() != null) {
			for (int x = 0; x < filtroTO.getArrEmpleado1TO().length; x++) {
				if (filtroTO.getArrEmpleado1TO()[x].getIdEmpleado() != filtroTO
						.getEmpleadoTO().getIdEmpleado()) {
					listEmpleadoTO.add(filtroTO.getArrEmpleado1TO()[x]);
				}
			}
		}

		return (EmpleadoTO[]) listEmpleadoTO
				.toArray(new EmpleadoTO[listEmpleadoTO.size()]);
	}
	
	public static BitacoraAsistenciaTO generarRangoBitacoraAsistencia(BitacoraHorarioTO bitacoraHorarioTO){	
		ArrayList<Date> listFechaHorario = new ArrayList<Date>();
		ArrayList<MotivoTO> listMotivoTO = new ArrayList<MotivoTO>();
		Date fechaInicio = bitacoraHorarioTO.getListFecha()[0];
		Date fechaFin = bitacoraHorarioTO.getListFecha()[1];
		
		BitacoraAsistenciaTO bitacoraAsistenciaTO = new BitacoraAsistenciaTO();
			
		for(long valor = fechaInicio.getTime(); valor<=fechaFin.getTime(); valor = valor + 86400000){
			
			Date fecha = new Date();
			fecha.setTime(valor);
			listFechaHorario.add(fecha);
			MotivoTO motivoTO = new MotivoTO();
			motivoTO.setIdMotivo(3);
			listMotivoTO.add(motivoTO);
		}
		bitacoraAsistenciaTO.setListFecha((Date[])listFechaHorario.toArray(new Date[listFechaHorario.size()]));
		bitacoraAsistenciaTO.setIdEmpleado(bitacoraHorarioTO.getIdEmpleado());
		bitacoraAsistenciaTO.setListMotivoTO((MotivoTO[])listMotivoTO.toArray(new MotivoTO[listMotivoTO.size()]));
		
		return bitacoraAsistenciaTO;
	}
	
	public static BitacoraAsistenciaTO ponerQuitarDescanso(BitacoraAsistenciaTO bitacoraAsistenciaTO){					
		for(int x = 0; x < bitacoraAsistenciaTO.getListFecha().length; x++){
			
			if(bitacoraAsistenciaTO.getListFecha()[x].getTime() == bitacoraAsistenciaTO.getFecha().getTime() )
			{
				if(bitacoraAsistenciaTO.getListMotivoTO()[x].getIdMotivo()== 3){
					bitacoraAsistenciaTO.getListMotivoTO()[x].setIdMotivo(1);
				}
				else if(bitacoraAsistenciaTO.getListMotivoTO()[x].getIdMotivo()== 1){
					bitacoraAsistenciaTO.getListMotivoTO()[x].setIdMotivo(3);
				}
			}
		}
		return bitacoraAsistenciaTO;
	}
	


	/*
	 * public static void main(String[] args){
	 * 
	 * System.out.println(validarRangoFecha(new Date(),new Date())); }
	 */
}
